#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <string>


/* 自定义字符串比较函数 */
bool MyCompare(const std::string& a, const std::string& b) {
	// -------------------- 符号处理 --------------------
	bool aNeg = false, bNeg = false;
	std::string aStr = a, bStr = b;

	// 处理负数符号（输入保证无前导加号）
	if (!aStr.empty() && aStr[0] == '-') {
		aNeg = true;
		aStr = aStr.substr(1); // 移除负号
	}
	if (!bStr.empty() && bStr[0] == '-') {
		bNeg = true;
		bStr = bStr.substr(1); // 移除负号
	}

	// 符号不同时：负数 < 正数
	if (aNeg != bNeg) {
		return aNeg; // 若a是负数则a更小
	}

	bool bothNeg = aNeg && bNeg; // 是否同为负数

	// -------------------- 分割整数和小数部分 --------------------
	int dotA = aStr.find('.');
	//a的整数部分
	std::string aInt = (dotA != std::string::npos) ? aStr.substr(0, dotA) : aStr;
	//a的小数部分
	std::string aFrac = (dotA != std::string::npos) ? aStr.substr(dotA + 1) : "";

	size_t dotB = bStr.find('.');
	//b的整数部分
	std::string bInt = (dotB != std::string::npos) ? bStr.substr(0, dotB) : bStr;
	//b的小数部分
	std::string bFrac = (dotB != std::string::npos) ? bStr.substr(dotB + 1) : "";

	// -------------------- 比较整数部分 --------------------
	// 整数部分长度不同时：长度长的数值更大（负数需反转结果）
	if (aInt.length() != bInt.length()) {
		bool ret = aInt.length() < bInt.length();
		return bothNeg ? !ret : ret;
	}

	// 逐位比较整数部分
	for (int i = 0; i < aInt.length(); ++i) {
		if (aInt[i] != bInt[i]) {
			bool ret = aInt[i] < bInt[i];
			return bothNeg ? !ret : ret; // 负数时反转比较结果
		}
	}

	// -------------------- 比较小数部分 --------------------
	int commonLen = std::min(aFrac.size(), bFrac.size());
	// 比较公共长度部分
	for (int i = 0; i < commonLen; ++i) {
		if (aFrac[i] != bFrac[i]) {
			bool ret = aFrac[i] < bFrac[i];
			return bothNeg ? !ret : ret; // 负数时反转比较结果
		}
	}

	// 公共部分相同，长度更长的更大（负数需反转）
	if (aFrac.size() != bFrac.size()) {
		bool ret = aFrac.size() < bFrac.size();
		return bothNeg ? !ret : ret;
	}

	// 完全相等时保持原始顺序（稳定排序）
	return a < b;
}

/**
 * 
 * 时间复杂度：O(nlogn * 100)
 * 空间复杂度：O(100 * n)
 * 
 * 
 * 浮点数排序
 * 
 */
int main() {
	std::string nums[110]{};

	int n;
	scanf("%d", &n);


	// 读取输入（保证无前导0和末尾多余0）
	for (int i = 0; i < n; ++i) {
		std::cin >> nums[i];
	}

	// 排序并保持原始字符串格式
	std::sort(nums, nums + n, MyCompare);

	for (int i = 0; i < n; ++i) {
		printf("%s\n", nums[i].c_str());
	}

	return 0;
}